package cn.dj.user.controller;

import cn.dj.basic.exception.BusinessException;
import cn.dj.basic.util.AjaxResult;
import cn.dj.user.dto.LoginDto;
import cn.dj.user.service.ILogininfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * 后端接口类：登录
 */
@RestController//@Controller+@ResponseBody 复合注解
@RequestMapping("/login")//匹配请求
public class LoginController {
    @Autowired//注入
    public ILogininfoService logininfoService;

    /**
     * 用户账户登录：邮箱，用户名，电话都可以
     * @return
     */
    @PostMapping("/account")//因为传递的参数是对象，地址栏不好放，所以用post请求（不用get）
    //对象，所以用post请求接收
    public AjaxResult accountLogin(@RequestBody LoginDto loginDto){
        try {
            //第一个是String - 是value的代号名。第二个Object里面既存有的会是登录信息对象，又会有有uuid-token-String类型==》所以用object
            Map<String,Object> map = logininfoService.accountLogin(loginDto);
            return AjaxResult.me().setObj(map);
        }catch (BusinessException e){//业务异常
            return new AjaxResult(false,e.getMessage());
        }catch (Exception e) {//系统异常
            e.printStackTrace();
            return new AjaxResult(false,"系统繁忙请稍后再试");
        }
    }

    /**
     * 微信登录  - 等一个请求，获取授权码code
     * 就code字段，所以map第二个参数类型就是String
     * @param map
     * @return
     */
    @PostMapping("/wechat")//因为传递的参数是对象，地址栏不好放，所以用post请求（不用get）
    //对象，所以用post请求接收
    public AjaxResult wechatLogin(@RequestBody Map<String,String> map){
        try {
            return logininfoService.wechatLogin(map);
        }catch (Exception e) {//系统异常
            e.printStackTrace();
            return new AjaxResult(false,"系统繁忙请稍后再试");
        }
    }

    /**
     * 微信绑定
     * @param map
     * @return
     */
    @PostMapping("/wechat/binder")//因为传递的参数是对象，地址栏不好放，所以用post请求（不用get）
    //对象，所以用post请求接收
    public AjaxResult wechatBinder(@RequestBody Map<String,String> map){
        try {
            return logininfoService.wechatBinder(map);
        }catch (BusinessException e){//业务异常
            return new AjaxResult(false,e.getMessage());
        }catch (Exception e) {//系统异常
            e.printStackTrace();
            return new AjaxResult(false,"系统繁忙请稍后再试");
        }
    }
}
